.. _cmlPmMxIsDone:

cmlPmMxIsDone
================================
--------------------------------


SYNOPSYS
`````````````
.. code-block:: none

  VT_I4 cmlPmMxIsDone ([in] VT_I4 BoardID, [in] VT_I4 NodeId, [in] VT_I4 NumChannel, 
  [in] VT_PI4 NumChannel, [out] VT_PI4 IsDone)

DESCRIPTION
`````````````  

- 여러 개의 축에 대하여 지정한 모든 축의 모션이 완료됐는지를 확인(確認)합니다. 이 함수는 
  다축제어뿐 아니라 원점복귀나 단축모션제어 작업시에도 활용할 수 있습니다. 
 
\

- 이 함수의 사용과 호출에 있어, 제공된 ㈜커미조아의 함수 헤더 Visual Basic 에서는 함수의
  첨두어 cml 가 붙지 않습니다.

PARAMETER
`````````````

▶ BoardID : 사용자가 설정한 디바이스(보드) ID. 
 
▶ NodeId : 사용자가 제어하고자 하는 노드 번호.  
 
▶ NumAxes : 동시에 작업을 수행할 대상 축의 수 
 
▶ NumChannel : 작업완료를 확인(確認)할 대상 축의 배열 주소값. 이 배열의 크기는 
NumAxes값과 일치하거나 커야 합니다. 
 
▶ IsDone : 다축구동 완료 여부를 판단할 수 있는 매개변수 입니다. 

.. csv-table::
   :widths: 10 90
   :header-rows: 1
   :stub-columns: 0

    Value, Meaning
    cmlFALSE, 모션작업이 완료되지 않음 
    cmlTRUE, 모션작업이 완료됨 
                

RETURN VALUE
`````````````

.. csv-table::
  :widths: 10 90
  :header-rows: 1
  :stub-columns: 0

  Value, Meaning
  음수, 수행 실패
  ERR_NONE, 수행 성공


EXAMPLE
`````````

.. code-block:: c++
 :linenos:
 :emphasize-lines: 5

  C/C++ 
  // BoardID는 0이라고 가정합니다. 
  long nIsDone; 
  long nNumChannel[2] = {0, cmY1}; 
  double fDistList[2] = {1000, 1000}; 
  if(cmlPmMxMove(BoardID, 0, 2, nNumChannel, fDistList, cmlFALSE) != ERR_NONE){ 
  //Handle 은 사용자가 생성한 폼의 핸들 값입니다. 
  // 에러메시지 출력 
  return; 
  } 
  while (1){ 
  cmlPmMxIsDone(BoardID, 0, 2, nNumChannel, &nIsDone);  
  if(nIsDone == cmlTRUE) break; 
  else{ 
  // 다축 모션이 종료되지 않은 경우입니다. 적절한 처리를 합니다. 
  } 
  } 

.. code-block:: c++
 :linenos:

  Visual Basic 
  „BoardID 는 0이라고 가정합니다. 
  Dim nNumChannel(2) As Long 
  Dim fDistList(2) As Double 
  „ 대상 축 설정 
  nNumChannel(0) = 0 
  nNumChannel(1) = cmY1 
  „ 대상 축에 대한 이송 거리 설정 
  fDistList(0) = 1000 
  fDistList(1) = 1000 
  If(PmMxMove(BoardID, 0, 2, nNumChannel(0), fDistList(0), cmlFALSE) <> ERR_NONE) Then 
  // 에러메시지 출력 
  Exit Sub 
  End If 
  While(PmMxIsDone(BoardID, 0, 2, nNumChannel(0), cmlTRUE) <> ERR_NONE) Then 
  // 에러메시지 출력 
  Exit Sub; 
  End If

.. code-block:: c++
 :linenos:

  Delphi 
  // 대상 축 설정 
  // BoardID는 0이라고 가정합니다. 
  nNumChannel[0] := 0; 
  nNumChannel[1] := cmY1;
  // 대상 축에 대한 이송 거리 설정 
  fDistList[0] := 1000; 
  fDistList[1] := 1000; 
  if(cmlPmMxMove(BoardID, 0, 2, @nNumChannel, @fDistList) <> ERR_NONE) then begin 
  // 에러메시지 출력  
  end; 
  while(cmlPmMxIsDone(BoardID, 0, 2, @nNumChannel, @IsDone) <> ERR_NONE) do begin 
  // 여기서 IsDone 이 cmlTRUE 이면 Loop 를 탈출하면 됩니다. 
  … 
  end; 
  if(cmlErrGetLastCode() <> ERR_NONE) then begin 
  // 에러메시지 출력 
  end; 

SEE ALSO
```````````````

.. seealso:: :ref:`cmlPmMxWaitDone`